home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / txf / src / txfcfile.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  3KB  |  158 lines

  1. /***************
  2. *
  3. * g:\exe\txf\src\txfcfile.c
  4. */
  5. #include "txf.h"
  6.  
  7. void read_def(char *own)
  8. {
  9.     struct find_t filedata;
  10.     char *period, buf[80], *txfdef;
  11.  
  12.     if ((txfdef = getenv("TXFDEF")) != NULL) {
  13.         strncpy(buf, txfdef, 80);
  14.         if (_dos_findfirst(buf,
  15.                 _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) != 0) {
  16.             if ((strchr(buf, '\0')-1) != (jstrrchr(buf,'\\')))
  17.                 strcat(buf, "\\");
  18.             strcat(buf, "TXF.DEF");
  19.         }
  20.     }
  21.     else {
  22.         strcpy(buf, own);
  23.         period=strchr(buf, '.');
  24.         strcpy(period, ".DEF");
  25.     }
  26.     if (_dos_findfirst(buf, _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) == 0)
  27.         read_commandfile(buf);
  28.  
  29. /*
  30.         fprintf(stderr,"Special:DEF FILE:%s\n",buf);
  31. */
  32. }
  33.  
  34. void savemem(char chr)
  35. {
  36.     fbuf[fbufptr] = chr;
  37.     fbufptr++;
  38.     if (fbufptr >= (fbufsize * 1024)) {
  39.         fbufsize++;
  40.         realloc(fbuf, fbufsize*1024);
  41.     }
  42. }
  43.  
  44. void read_commandfile(char *commandfile)
  45. {
  46.     FILE *fr;
  47.     int paraptr=0;
  48.     char *ptr,*txfpath;
  49.     char filename[80],chr=0;
  50.     struct find_t filedata;
  51.     static int fbufbase=0;
  52.  
  53.     if ((txfpath = getenv("TXFPATH")) != NULL) {
  54.         strncpy(filename, txfpath, 80);
  55.         if ((strchr(filename, '\0') - 1) != (jstrrchr(filename, '\\')))
  56.             strcat(filename, "\\");
  57.         strcat(filename, commandfile);
  58.     }
  59.     else {
  60.         strcpy(filename, commandfile);
  61.     }
  62.  
  63.     ptr = jstrrchr(filename, '\\');
  64.     if (ptr == NULL) ptr = filename;
  65.     if (strchr(ptr, '.') == NULL) strcat(filename, ".TXF");
  66.     if (_dos_findfirst(filename,
  67.             _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) != 0) {
  68.         strcpy(filename, commandfile);
  69.         if (strchr(ptr, '.') == NULL) strcat(filename, ".TXF");
  70.     }
  71.  
  72.     fbufbase = fbufptr;
  73.     if (_dos_findfirst(filename,
  74.             _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) == 0) {
  75.         fr = fopen(filename, "r");
  76.         if (fr == NULL) {
  77.             fprintf(stderr, "Info:file=<%s>\n", filename);
  78.             errexit("cannot open DEF/command file\n");
  79.         }
  80.         if (fbufsize == 0) {
  81.             fbuf = malloc(1024);
  82.             fbufsize = 1;
  83.         }
  84.         while (chr != EOF) {
  85.             chr = getc(fr);
  86.             if (chr == EOF) continue;
  87.             if (chr == sep) {
  88.                 chr = getc(fr);
  89.                 while ((chr != EOF) && (chr != sep)) {
  90.                     savemem(chr);
  91.                     chr=getc(fr);
  92.                 }
  93.                 savemem(NUL);
  94.             }
  95.             else if (chr == '#') {
  96.                 while ((chr != EOF) && (chr != '\n')) chr = getc(fr);
  97.             }
  98.             else if (chr > ' ') {
  99.                 paraptr = fbufptr;
  100.                 while ((chr != EOF) && (chr > ' ')) {
  101.                     savemem(chr);
  102.                     chr = getc(fr);
  103.                 }
  104.                 savemem(NUL);
  105.                 if ((fbuf[paraptr] == '-') && ((fbuf[paraptr+1] == 's') ||
  106.                         (fbuf[paraptr+1] == 'S'))) {
  107.                     while ((chr != EOF) && (chr <= ' ')) chr = getc(fr);
  108.                     if (chr != EOF) sep = chr;
  109.                     savemem(chr);
  110.                     savemem(NUL);
  111.                 }
  112.             }
  113.         }
  114.         savesw(fbufbase);
  115.     }
  116.     else {
  117.         if (viewmode > 0) {
  118.             fprintf(stderr,
  119.                 "Warning:commandfile'%s' is not found...\n", filename);
  120.         }
  121.     }
  122. }
  123.  
  124. void savesw(int base)
  125. {
  126.     static int i = 0;
  127.     int j , k;
  128.     char *ptr;
  129.     char *env;
  130.  
  131.     while ((i > 0) && (para[i-1] == NULL)) i--;
  132.     j = i;
  133.     ptr = &fbuf[base];
  134.     while ((ptr - fbuf) < fbufptr) {
  135.         if (*ptr == NUL) {
  136.             ptr++;
  137.         }
  138.         else {
  139.             para[i] = ptr;
  140.             i += 1;
  141.             if (i >= PARA_MAX) errexit("too many parameters");
  142.             ptr = strchr(ptr, NUL);
  143.         }
  144.     }
  145.     para[i] = NULL;
  146.  
  147.     if ((env = getenv("TXF")) != NULL) {
  148.         if (strcmp(env,"TEST") == 0)
  149.             for(k = 0; k < i; k++)
  150.                 fprintf(stderr, "Info:PARA[%d]=<%s>\n", k, para[k]);
  151.         fprintf(stderr, "Info:(i,j)=(%d,%d)\n", i, j);
  152.     }
  153.  
  154.     swchk(i - j, ¶[j]);
  155.  
  156. }
  157.  
  158.